home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
cat
/
datasys.d
< prev
next >
Wrap
Text File
|
1997-10-26
|
10KB
|
229 lines
DEFINITION MODULE dataSys;
(*==============================================================*
* Modul: CAT-Datenbank, Strukurdefinition *
* Autor: Johannes Gttker-Schnetmann *
* erstellt am: 11.10.1992 *
* letzte nderung am: 12.08.1992 *
* Version: 1.2 *
* Interne Version: V#0002 *
*==============================================================*
Definition der Strukturen in der Cat-Datenbank. Hier, damit man
auch von CatPutz aus bequem an diese Definitionen kommt.
*----------------------------------------------------------------------------
* Datum Vers. Autor nderung (Arbeitsbericht)
*----------------------------------------------------------------------------
* 11.10.92 0001 JGS Erste Version
* 22.12.92 0002 JGS grPosType hierhin, kann nun auch direkt nach CatPutz
* importiert werden.
* 12.08.93 JGS Zwei weitere Flags eingefhrt.
*----------------------------------------------------------------------------
*)
FROM SYSTEM IMPORT TSIZE;
(* Verlagert von data nach hier, fr CatPutz! *)
CONST private = 0;
empty = 0FFFFH;
notSaved = 0FFFEH;
personalName = 'Persnliche';
CONST bGelesen = 0; bFiltered = 1; bInteressant = 2; bTeilloeschung = 3;
bTotalloeschung = 4; bKommentieren = 5; bAntworten = 6; bUser1 = 7;
bUser2 = 8; bVererben = 9; (* bFiltered = 10; *)
(* Statusbits einer Msg *)
bComToOwnMessage = 10;
(* Vorlufig bis bei der Maus die Message-Ids diesen Namen auch verdienen: *)
bOldDupe = 15;
(* Neu, eigene Messages werden gekennzeichnet *)
bOwnMessage = 14;
bOldComToOwnMessage = 13;
(* da einige Betaversionen das so hatten, wird in einer bergangsphase beides *)
(* erkannt und ggf. 13 entfernt und dafr 10 gesetzt *)
CONST maxGroup = 65534;
(* Header fr gruppen.pos und *.par *)
TYPE FileHeaderType = RECORD
CatMagic : LONGCARD;
Version : CARDINAL;
VersionMagic : CARDINAL;
END;
CONST dbHeaderLength = TSIZE(FileHeaderType);
dbCatMagic = 43415420H; (* "CAT " *)
dbVersion = 1; (* Versionsnummer der data.i *)
dbVersionMagic = 0123H; (* Versionsmagic *)
grPosVersionMagic = 0124H; (* Versionsmagic *)
standardHeader = FileHeaderType {dbCatMagic, dbVersion, dbVersionMagic};
(*--------------------------------------------------------------------
Cat-Version Magic Bemerkungen
0001 0123H Erste Version der neuen Datenbank
--------------------------------------------------------------------*)
TYPE posType = (aktuellePos, neuePos, letztePos, unreadPos, unreadCount);
onePos = ARRAY posType OF CARDINAL;
grPosType =
RECORD
head : FileHeaderType;
save : onePos;
pos : POINTER TO ARRAY[0..maxGroup] OF onePos;
posGroups : CARDINAL;
usedGroups: CARDINAL;
END;
CONST mVon = 0; mAn = 1; mMId = 2;
mRId = 3; mBox = 4; mName = 5;
mRefNr = 6; mDistribution = 7;
mGate = 8; mMime = 9; mFollowup = 10;
mReplyTo = 11; mSender = 12;
mUnknown = 14; mPrivateBytes = 15;
(* BITS in items *)
(*-------------------------------------------------------------------------------
Achtung, es ist wichtig, da die crc an erster Stelle steht und zwei Bytes
lang ist, davon geht data.i an mehreren Stellen aus. Auerdem mu der
dupeInfoType auf den pBlock passen!
--------------------------------------------------------------------------------*)
(*-- Aus Redundanzgrnden doppelt gespeicherte Information --*)
TYPE dupeInfoPtr = POINTER TO dupeInfoType;
TYPE dupeInfoType = RECORD
Datum : LONGCARD; (* Datum im Maustauschformat *)
items : BITSET; (* In der DAT vorhandene Dinge, *)
(* in der Reihenfolge wie oben angegeben *)
bits : BITSET;
hLength : CARDINAL; (* Lnge des MessageHeaders *)
idLength : CARDINAL; (* ID-Lnge im Header *)
Length : CARDINAL; (* Lnge der Mitteilung *)
Start : LONGCARD; (* Offset in der Datendatei *)
(*-- Bis hier genau wie in pBlock --*)
setTerminator : CARDINAL; (* beendet den Datensatz *)
END;
CONST Terminator = 0AA00H;
(* Kommt nach meinen Tests recht selten vor und ergibt damit einen gewissen Anhaltspunkt *)
(*-- Parameterblock fr die Parameterfiles --*)
TYPE pBlockPtr = POINTER TO pBlock;
TYPE pBlock =
RECORD
crc : CARDINAL; (* crc ber den Rest des Parameterblocks *)
Datum : LONGCARD; (* Datum im Maustauschformat *)
items : BITSET; (* In der DAT vorhandene Dinge, *)
(* in der Reihenfolge wie oben angegeben *)
bits : BITSET;
hLength : CARDINAL; (* Lnge des MessageHeaders *)
idLength : CARDINAL; (* ID-Lnge im Header *)
Length : CARDINAL; (* Lnge der Mitteilung *)
Start : LONGCARD; (* Offset in der Datendatei *)
upMess : CARDINAL;
downMess : CARDINAL;
rightMess : CARDINAL;
leftMess : CARDINAL;
KomCount : CARDINAL;
END; (* 30 Byte *)
(*-- Bei persnlichen Msgs zustzlich gespeicherte Infos --*)
TYPE pInfoPtr = POINTER TO pInfoType;
TYPE pInfoType = RECORD
LeseDatum : LONGCARD;
Status,
locked : CHAR; (* wenn # 0 dann Status nicht vom User nderbar *)
END;
(*--------------------------------------------------------------------
Neuer Aufbau eines *.DAT-Eintrages:
+=========================+ \
| Header, max. 16kB | |
| | \ Erluterung unten
| | / Lnge in "hLength"
| | |
/ +=========================+ /
Gesamt-| | Messagetext, max 64kB | Messagetext, Strings, die mit lf getrennt
Lnge < | | sind. Demnchst einmal noch nullterminiert
in | | | am Ende.
Length \ +=========================+ \
| long Datum | |
+-------------------------+ |
| word items | |
+-------------------------+ \ Aus Redundanzgrnden
| word bits | / nochmal hier; fr Reparaturzwecke;
+-------------------------+ | dieselben Werte, wie in pBlock
| word strLength | |
+-------------------------+ |
| word Length | |
+-------------------------+ /
In Header steht:
+-------------------------+
| Message-ID | Lnge in idLength, sicher vorhanden
+=========================+ <- Ein Byte eingeschoben, falls idLength ungerade ist
| Anzahl der Eintrge | Anzahl der noch folgenden Strings
+-------------------------+
| Lnge Eintrag # 1 | Lnge von String Nummer 1 (Betreff)
+-------------------------+
. .
. .
+-------------------------+
| Lnge Eintrag # n |
+=========================+
| Betreff | sicher vorhanden
+=========================+
| Absender | wahrscheinlich vorhanden
+-------------------------+
| Empfnger | sporadisch vorhanden
+-------------------------+
| MID | Message-ID bei Messages ber ein Gateway
+-------------------------+
| RID | Kommentar-ID bei Messages ber ein Gateway
+-------------------------+
| BOX | Hinweise auf Absenderbox
+-------------------------+
| Name | Name des Absenders, falls nicht gleich "Absender"
+=========================+
| Weitere Textinformation | Strings der Maus, die Cat noch nicht kennt
+=========================+
| private-Bytes | Statusdatum, locked, Status
+-------------------------+
Bis auf die beiden letzten Eintrge sind alle Eintrge nullterminierte
Strings und nur vorhanden, wenn in "items" angegeben. Die Reihenfolge gem
"items" wird eingehalten.
Also einmal mit Hausnummern:
items = 00000000 00101101 = 2D hex heit, da es auer der Message-ID und
dem Betreff noch einen Absender, eine Gateway-Message-ID, eine Kommentar-ID
und eine Namensangabe in dieser Reihenfolge im Header gibt.
In der Sparte "Weiter Textinformation" stehen Informationen, die von
der Maus geliefert werden, aber die Cat noch nicht kennt. Es handelt sich
dabei um eine Liste nullterminierter Strings, die mit einem leeren
String beendet wird. Der erste Buchstabe der Strings entspricht dem
vom MausTausch-Protokoll bergebenen.
private-Bytes enthlt die bisherige Sonderinfo aus dem Parameterblock bei
persnlichen Msgs. Der Eintrag ist immer 6 Bytes lang und folgendermaen
aufgebaut:
----------------------------------------------------------------------*)
END dataSys.